package com.my.study.structures.tree;

/**
 * @author Carlos
 * @version 1.0
 * @Description 顺序二叉树，，，一般是完全二叉树
 *
 * <p>
 * 父结点下标：n
 * 左子结点下标：(2 * n) + 1
 * 右子结点下标：(2 * n) + 2
 *
 * <p>
 * 子结点下标：n
 * 父结点下标：(n - 1) / 2
 * </p>
 * @date 2021/8/11 22:45
 **/
public class ArrayBinaryTree {

    private int[] arr;


    public ArrayBinaryTree(int[] arr) {
        this.arr = arr;
    }

    public void preOrder() {
        preOrder(0);
    }

    /**
     * 前序遍历
     *
     * @param index 数组下标
     */
    public void preOrder(int index) {
        int len;
        if (null == arr || (len = arr.length) == 0) {
            System.out.println("数组为空");
            return;
        }

        System.out.println(arr[index]);

        // 左递归
        if ((2 * index) + 1 < len) {
            preOrder(2 * index + 1);
        }

        // 右递归
        if (2 * index + 2 < len) {
            preOrder(2 * index + 2);
        }
    }


}
